const gulp = require('gulp');
const babel = require('gulp-babel');
const uglify = require('gulp-uglify');
const rename = require('gulp-rename');
const concat = require('gulp-concat');
const less = require('gulp-less');
const minifycss = require('gulp-minify-css');
const imagemin = require('gulp-imagemin');
const plumber = require('gulp-plumber');

// 压缩图片
gulp.task('convertImg', function() {
  return gulp.src('src/images/*')
    .pipe(imagemin({
        progressive: true,
        svgoPlugins: [{removeViewBox: false}]
    }))
    .pipe(gulp.dest('dist/statics/images/'))
});

//转换less文件   
gulp.task('convertLess', function() {
    return gulp.src('src/less/*.less')//该任务针对的文件
        .pipe(plumber())
        .pipe(less())//该任务调用的模块
        .pipe(concat('main.css'))
        .pipe(gulp.dest('dist/statics/css'))
        .pipe(rename({ suffix: '.min' }))
        .pipe(minifycss())
        .pipe(gulp.dest('dist/statics/css'))
});

//转换less文件   
gulp.task('convertPublicLess', function() {
    return gulp.src('src/less/public/public.less')//该任务针对的文件
        .pipe(plumber())
        .pipe(less())//该任务调用的模块
        .pipe(gulp.dest('dist/statics/css'))
        .pipe(rename({ suffix: '.min' }))
        .pipe(minifycss())
        .pipe(gulp.dest('dist/statics/css'))
});

//压缩，合并 模块js
gulp.task('convertPageJS', function() {
    return gulp.src('src/js/**/*.js')      //需要操作的文件
        .pipe(babel({
            presets: ['es2015']
        }))
        .pipe(gulp.dest('dist/statics/js'))       //输出到文件夹
        // .pipe(uglify())    //压缩
        // .pipe(gulp.dest('dist/statics/js'))  //输出
});

//压缩，合并 公用js
gulp.task('convertPublicJs', function() {
    return gulp.src('src/js/public/*.js')      //需要操作的文件
        .pipe(concat('public.js'))    //合并所有js到main.js
        .pipe(gulp.dest('dist/statics/js'))       //输出到文件夹
        .pipe(rename({suffix: '.min'}))   //rename压缩后的文件名
        .pipe(uglify())    //压缩
        .pipe(gulp.dest('dist/statics/js'))  //输出
});

//压缩，合并 config.js配置
gulp.task('convertConfigJs', function() {
    return gulp.src('config/*.js')      //需要操作的文件
        .pipe(concat('config.js'))    //合并所有js到main.js
        .pipe(gulp.dest('dist/config'))       //输出到文件夹
        .pipe(rename({suffix: '.min'}))   //rename压缩后的文件名
        .pipe(uglify())    //压缩
        .pipe(gulp.dest('dist/config'))  //输出
});

// 第三方框架移植
gulp.task('convertFramesJs',function() {
    return gulp.src(['src/frames/**/*'])// 该任务针对的文件
        .pipe(gulp.dest('dist/frames'))
});

// 组件样式
gulp.task('convertComponentsLess', function() {
    return gulp.src('src/components/**/*.less')//该任务针对的文件
        .pipe(plumber())
        .pipe(less())
        .pipe(minifycss())
        .pipe(gulp.dest('dist/components/'))
});
// 组件脚本
gulp.task('convertComponentsJs', function() {
    return gulp.src('src/components/**/*.js')//该任务针对的文件
        // .pipe(uglify())
        .pipe(gulp.dest('dist/components/'))
});
// 组件HTML
gulp.task('convertComponentsHtml', function() {
    return gulp.src('src/components/**/*.html')//该任务针对的文件
        .pipe(gulp.dest('dist/components/'))
});

// 监视文件变化，自动执行任务
gulp.task('watch', function(){
    gulp.watch('src/less/*.less', ['convertLess']);
    gulp.watch('src/js/*.js', ['convertPageJS']);
})

// 打包
gulp.task('build', ['convertImg', 'convertPageJS', 'convertPublicLess', 'convertLess', 'convertComponentsLess', 'convertComponentsJs', 'convertComponentsHtml', 'convertPublicJs', 'convertConfigJs', 'convertFramesJs']);

// 开发
gulp.task('dev', ['convertPageJS', 'convertLess', 'watch']);